// 程序入口

const path = require('path'); // 核心模块
const express = require('express'); // 框架
const logger = require('morgan'); // 日志组件
const multer = require('multer'); // 文件上传

const port = 8080;
const app = express();
// 指定静态资源所在的根目录
const staticRoot = path.join(__dirname, 'public');

// 日志中间件
app.use(logger('dev'));
// 处理JSON
app.use(express.json());
// 处理 application/x-www-form-urlencoded 数据
app.use(express.urlencoded({ extended: false }));
// 处理静态资源 ( 图片文件、样式文件、脚本文件、页面文件 )
app.use(express.static(staticRoot));

// 路由: 检查用户名是否是可以使用的
app.post('/check', (req, resp) => {
    let params = req.body; // 从请求正文中获得数据
    let username = params.username;

    // 若 用户名 是 以 zhang 为前缀的
    if (username.startsWith('zhang')) {
        let o = Object.create(null);
        o.success = true;
        o.message = '恭喜你，这个用户名是可以使用的';
        resp.json(o);
    } else {
        resp.json({ success: false, message: '很遗憾，这个用户名不可以使用' });
    }

});


// 使用 multer 的 diskStorage 函数来设置 存储路径 和 文件名称
const storage = multer.diskStorage({
    destination: (req, file, callback) => {
        // 使用回调函数第二个参数确定文件存储路径
        callback(null, path.join(__dirname, 'uploads'));
    },
    filename: (req, file, callback) => {
        // 使用回调函数第二个参数确定上传之后的文件名称
        callback(null, file.fieldname + '-' + Date.now() + '-' + file.originalname);
    }
});

const upload = multer({ storage: storage });

let multerMiddleware = upload.array('upfile', 5);

// 路由: 接受用户上传的文件
app.post('/upload', (req, resp) => {

    let x = Object.create(null);

    multerMiddleware(req, resp, ex => {
        if (ex) {
            x.success = false;
            x.message = '上传失败';
        } else {
            x.success = true;
            x.message = '上传成功';
        }
        resp.json(x);
    });
});

app.listen(port);